// 基数排序

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int bit(int val, int pos)
{
    while(--pos)
    {
        val /= 10;
    }
    return val % 10;
}

int main()
{
    int n;
    vector<int> L;
    int k;
    cin >> n;
    for(int i = 0; i != n; i++)
    {
        int x;
        scanf("%d", &x);
        L.push_back(x);
    }
    cin >> k;

    for(int j = 1; j <= k; j++)
    {
        vector<int> Li[10];
        while(!L.empty())
        {
            int a = L.front();
            L.erase(L.begin());

            int i = bit(a, j);
            Li[i].push_back(a);
        }

        L = Li[0];
        for(int i = 1; i <= 9; i++)
        {
            L.insert(L.end(), Li[i].begin(), Li[i].end());
        }
    }

    for(auto v:L)
    {
        printf("%d ", v);
    }
    return 0;
}

/*
从低位到高位逐位比较
数字小的在前，数字相同则保持原顺序
*/